package h0714;

import java.util.*;
/**
  * @description 会议室占用时间合并。
  * @author 不知名帅哥
  * @date 2024/7/14 21:55
  * @version 1.0
*/
public class MeetingRoomOccupyTime {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] arr = new int[4][2];
        for (int i = 0; i < n; i++) {
            arr[i][0] = sc.nextInt();
            arr[i][1] = sc.nextInt();
        }
        List<int[]> result = getResult(arr);
        for (int[] ints : result) {
            System.out.println(ints[0] + " " + ints[1]);
        }
    }

    private static List<int[]> getResult(int[][] arr) {
        Arrays.sort(arr, (o1, o2) -> o1[0] - o2[0]); //按照起始时间排序
        List<int[]> res = new ArrayList<>();

        int n = arr.length;
        if (n == 1) {
            res.add(new int[]{arr[0][0], arr[0][1]});
            return res;
        }
        //初始化开始和结束时间。
        int start = arr[0][0];
        int end = arr[0][1];
        for (int i = 1; i < n; i++) {
            //可以合并的条件是前一个的结束时间大于后一个的开始时间
            if (arr[i][0] <= end) {  //如果有重合，合并。
                end = Math.max(end, arr[i][1]);//更新结束时间
            } else {
                res.add(new int[]{start, end}); //没有重合，将当前start，end加入。并且在后面更新时间。
                start = arr[i][0];  //没有重合区间，选取当前区间开始为start。
                end = arr[i][1];
            }
        }
        //合并最后一个区间
        res.add(new int[]{start, end});
        return res;
    }

}
